home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / BinaryExpression.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  4.7 KB  |  165 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.Label;
  7. import sun.tools.java.CompilerError;
  8. import sun.tools.java.Constants;
  9. import sun.tools.java.Environment;
  10. import sun.tools.java.Type;
  11.  
  12. public class BinaryExpression extends UnaryExpression {
  13.    Expression left;
  14.  
  15.    BinaryExpression(int var1, int var2, Type var3, Expression var4, Expression var5) {
  16.       super(var1, var2, var3, var5);
  17.       this.left = var4;
  18.    }
  19.  
  20.    public Expression order() {
  21.       if (((Expression)this).precedence() > this.left.precedence()) {
  22.          UnaryExpression var1 = (UnaryExpression)this.left;
  23.          this.left = var1.right;
  24.          var1.right = this.order();
  25.          return var1;
  26.       } else {
  27.          return this;
  28.       }
  29.    }
  30.  
  31.    public long checkValue(Environment var1, Context var2, long var3, Hashtable var5) {
  32.       var3 = this.left.checkValue(var1, var2, var3, var5);
  33.       var3 = super.right.checkValue(var1, var2, var3, var5);
  34.       int var6 = this.left.type.getTypeMask() | super.right.type.getTypeMask();
  35.       ((UnaryExpression)this).selectType(var1, var2, var6);
  36.       if ((var6 & 8192) == 0 && super.type.isType(13)) {
  37.          var1.error(super.where, "invalid.args", Constants.opNames[super.op]);
  38.       }
  39.  
  40.       return var3;
  41.    }
  42.  
  43.    Expression eval(int var1, int var2) {
  44.       return this;
  45.    }
  46.  
  47.    Expression eval(long var1, long var3) {
  48.       return this;
  49.    }
  50.  
  51.    Expression eval(float var1, float var2) {
  52.       return this;
  53.    }
  54.  
  55.    Expression eval(double var1, double var3) {
  56.       return this;
  57.    }
  58.  
  59.    Expression eval(boolean var1, boolean var2) {
  60.       return this;
  61.    }
  62.  
  63.    Expression eval(String var1, String var2) {
  64.       return this;
  65.    }
  66.  
  67.    Expression eval() {
  68.       if (this.left.op == super.right.op) {
  69.          switch (this.left.op) {
  70.             case 61:
  71.                return this.eval(((BooleanExpression)this.left).value, ((BooleanExpression)super.right).value);
  72.             case 62:
  73.             case 63:
  74.             case 64:
  75.             case 65:
  76.                return this.eval(((IntegerExpression)this.left).value, ((IntegerExpression)super.right).value);
  77.             case 66:
  78.                return this.eval(((LongExpression)this.left).value, ((LongExpression)super.right).value);
  79.             case 67:
  80.                return this.eval(((FloatExpression)this.left).value, ((FloatExpression)super.right).value);
  81.             case 68:
  82.                return this.eval(((DoubleExpression)this.left).value, ((DoubleExpression)super.right).value);
  83.             case 69:
  84.                return this.eval(((StringExpression)this.left).value, ((StringExpression)super.right).value);
  85.          }
  86.       }
  87.  
  88.       return this;
  89.    }
  90.  
  91.    public Expression inline(Environment var1, Context var2) {
  92.       this.left = this.left.inline(var1, var2);
  93.       super.right = super.right.inline(var1, var2);
  94.       return (Expression)(this.left == null ? super.right : new CommaExpression(super.where, this.left, super.right));
  95.    }
  96.  
  97.    public Expression inlineValue(Environment var1, Context var2) {
  98.       this.left = this.left.inlineValue(var1, var2);
  99.       super.right = super.right.inlineValue(var1, var2);
  100.  
  101.       try {
  102.          return this.eval().simplify();
  103.       } catch (ArithmeticException var3) {
  104.          var1.error(super.where, "arithmetic.exception");
  105.          return this;
  106.       }
  107.    }
  108.  
  109.    public Expression copyInline(Context var1) {
  110.       BinaryExpression var2 = (BinaryExpression)((Node)this).clone();
  111.       if (this.left != null) {
  112.          var2.left = this.left.copyInline(var1);
  113.       }
  114.  
  115.       if (super.right != null) {
  116.          var2.right = super.right.copyInline(var1);
  117.       }
  118.  
  119.       return var2;
  120.    }
  121.  
  122.    public int costInline(int var1) {
  123.       return 1 + (this.left != null ? this.left.costInline(var1) : 0) + (super.right != null ? super.right.costInline(var1) : 0);
  124.    }
  125.  
  126.    void codeOperation(Environment var1, Context var2, Assembler var3) {
  127.       throw new CompilerError("codeOperation: " + Constants.opNames[super.op]);
  128.    }
  129.  
  130.    public void codeValue(Environment var1, Context var2, Assembler var3) {
  131.       if (super.type.isType(0)) {
  132.          Label var4 = new Label();
  133.          Label var5 = new Label();
  134.          ((Expression)this).codeBranch(var1, var2, var3, var4, true);
  135.          var3.add(super.where, 18, new Integer(0));
  136.          var3.add(super.where, 167, var5);
  137.          var3.add(var4);
  138.          var3.add(super.where, 18, new Integer(1));
  139.          var3.add(var5);
  140.       } else {
  141.          this.left.codeValue(var1, var2, var3);
  142.          super.right.codeValue(var1, var2, var3);
  143.          this.codeOperation(var1, var2, var3);
  144.       }
  145.    }
  146.  
  147.    public void print(PrintStream var1) {
  148.       var1.print("(" + Constants.opNames[super.op] + " ");
  149.       if (this.left != null) {
  150.          this.left.print(var1);
  151.       } else {
  152.          var1.print("<null>");
  153.       }
  154.  
  155.       var1.print(" ");
  156.       if (super.right != null) {
  157.          super.right.print(var1);
  158.       } else {
  159.          var1.print("<null>");
  160.       }
  161.  
  162.       var1.print(")");
  163.    }
  164. }
  165.